package main

import (
	"fmt"
	"math/rand"
	"time"
)

//Go 提供了一种称为通道的机制，用于在 goroutine 之间共享数据。
//需要在声明通道时指定数据类型。
//有两种类型的通道：无缓冲通道和缓冲通道。
//无缓冲通道用于执行 goroutine 之间的同步通信，而缓冲通道用于执行异步通信。
//无缓冲通道保证在发送和接收发生的瞬间执行两个 goroutine 之间的交换。缓冲通道没有这样的保证。

//通道由 make 函数创建，该函数指定 chan 关键字和通道的元素类型。
//语法：
//Unbuffered := make(chan int)  // 整型无缓冲通道
//buffered := make(chan int, 10)// 整型有缓冲通道

//将值发送到通道的代码块需要使用 <- 运算符：
//goroutine1 := make(chan string, 5) //字符串缓存通道
//goroutine1 <- "Australia" //通过通道发送字符串
//从通道接收值
//data := <- goroutine1

var values = make(chan int)

func send() {
	rand.Seed(time.Now().UnixNano()) // 时间戳
	value := rand.Intn(10)
	fmt.Printf("send:%v\n", value)
	values <- value
}
func main() {
	//从通道接受值
	defer close(values)
	go send()
	fmt.Println("wait....")
	value := <-values
	fmt.Printf("receive:%v\n", value)
	fmt.Println("end...")
}
